home *** CD-ROM | disk | FTP | other *** search
- package netscape.ldap.util;
-
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.StringTokenizer;
- import java.util.Vector;
- import netscape.ldap.LDAPAttribute;
- import netscape.ldap.LDAPModification;
-
- public class LDIF {
- private static final char COMMENT = '#';
- private int m_version = 1;
- private boolean m_done = false;
- private LineReader m_reader;
- private String m_source;
- private MimeBase64Decoder m_decoder;
- private boolean m_currEntryDone = false;
-
- public LDIF() throws IOException {
- DataInputStream var1 = new DataInputStream(System.in);
- BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "UTF8"));
- this.m_reader = new LineReader(this, var2);
- this.m_source = "System.in";
- this.m_decoder = new MimeBase64Decoder();
- }
-
- public LDIF(String var1) throws IOException {
- FileInputStream var2 = new FileInputStream(var1);
- DataInputStream var3 = new DataInputStream(var2);
- BufferedReader var4 = new BufferedReader(new InputStreamReader(var3, "UTF8"));
- this.m_reader = new LineReader(this, var4);
- this.m_source = var1;
- this.m_decoder = new MimeBase64Decoder();
- }
-
- public LDIF(DataInputStream var1) throws IOException {
- BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "UTF8"));
- this.m_reader = new LineReader(this, var2);
- this.m_source = var1.toString();
- }
-
- public LDIFRecord nextRecord() throws IOException {
- return this.m_done ? null : this.parse_ldif_record(this.m_reader);
- }
-
- private LDIFRecord parse_ldif_record(LineReader var1) throws IOException {
- Object var2 = null;
- Object var3 = null;
- new Vector();
- Object var4 = null;
- String var6 = var1.readLine();
- if (var6 == null) {
- return null;
- } else if (!var6.startsWith("dn:")) {
- throw new IOException("no dn found in <" + var6 + ">");
- } else {
- String var7 = var6.substring(3).trim();
- if (var7.startsWith(":") && var7.length() > 1) {
- String var5 = var7.substring(1).trim();
- var7 = new String(this.getDecodedBytes(var5), "UTF8");
- }
-
- LDIFContent var9 = this.parse_ldif_content(var1);
- LDIFRecord var8 = new LDIFRecord(var7, var9);
- return var8;
- }
- }
-
- private LDIFContent parse_ldif_content(LineReader var1) throws IOException {
- String var2 = var1.readLine();
- if (var2 != null && var2.length() >= 1 && !var2.equals("-")) {
- if (var2.startsWith("changetype:")) {
- String var13 = var2.substring(11).trim();
- if (var13.equals("modify")) {
- LDIFModifyContent var17 = this.parse_mod_spec(var1);
- return var17;
- } else if (var13.equals("add")) {
- LDIFAddContent var16 = this.parse_add_spec(var1);
- return var16;
- } else if (var13.equals("delete")) {
- LDIFDeleteContent var15 = this.parse_delete_spec(var1);
- return var15;
- } else if (!var13.equals("moddn") && !var13.equals("modrdn")) {
- throw new IOException("change type not supported");
- } else {
- LDIFModDNContent var14 = this.parse_moddn_spec(var1);
- return var14;
- }
- } else {
- Hashtable var3 = new Hashtable();
- Object var6 = null;
-
- while(true) {
- int var7 = var2.length();
- if (var7 >= 1) {
- int var8 = var2.indexOf(58);
- if (var8 == -1) {
- throw new IOException("no ':' found in <" + var2 + ">");
- }
-
- String var4 = var2.substring(0, var8).toLowerCase();
- Object var5 = "";
- ++var8;
- if (var7 > var8) {
- if (var2.charAt(var8) == ':') {
- ++var8;
- String var9 = var2.substring(var8).trim();
- var5 = this.getDecodedBytes(var9);
- } else if (var2.charAt(var8) == '<') {
- try {
- URL var23 = new URL(var2.substring(var8 + 1).trim());
- String var10 = var23.getFile();
- var5 = this.getFileContent(var10);
- } catch (MalformedURLException var11) {
- throw new IOException("Exception: cannot construct url " + var2.substring(var8 + 1).trim());
- }
- } else {
- var5 = var2.substring(var8).trim();
- }
- }
-
- LDAPAttribute var18 = (LDAPAttribute)var3.get(var4);
- if (var18 == null) {
- var18 = new LDAPAttribute(var4);
- }
-
- if (var5 instanceof String) {
- var18.addValue((String)var5);
- } else {
- var18.addValue((byte[])var5);
- }
-
- var3.put(var4, var18);
- var2 = var1.readLine();
- if (var2 != null && var2.length() >= 1 && !var2.equals("-")) {
- continue;
- }
-
- if (var2 != null && var2.length() < 1) {
- this.m_currEntryDone = true;
- }
- }
-
- Enumeration var19 = var3.elements();
- LDIFAttributeContent var22 = new LDIFAttributeContent();
-
- while(var19.hasMoreElements()) {
- var22.addElement((LDAPAttribute)var19.nextElement());
- }
-
- var3.clear();
- Object var12 = null;
- return var22;
- }
- }
- } else {
- if (var2 != null && var2.length() < 1) {
- this.m_currEntryDone = true;
- }
-
- return null;
- }
- }
-
- private byte[] getDecodedBytes(String var1) {
- ByteBuf var2 = new ByteBuf(var1);
- ByteBuf var3 = new ByteBuf();
- this.m_decoder.translate(var2, var3);
- return var3.toBytes();
- }
-
- private byte[] getFileContent(String var1) throws IOException {
- StringTokenizer var2 = new StringTokenizer(var1, "|");
- String var3 = var1;
- int var4 = var2.countTokens();
- if (var4 == 2) {
- String var5 = (String)var2.nextElement();
- int var6 = var5.lastIndexOf("/");
- String var7 = var5.substring(var6 + 1);
- var5 = (String)var2.nextElement();
- var5 = var5.replace('/', '\\');
- var3 = var7 + ":" + var5;
- }
-
- File var10 = new File(var3);
- byte[] var11 = new byte[(int)var10.length()];
- FileInputStream var12 = new FileInputStream(var3);
- var12.read(var11);
- return var11;
- }
-
- private LDIFAddContent parse_add_spec(LineReader var1) throws IOException {
- LDIFAttributeContent var2 = (LDIFAttributeContent)this.parse_ldif_content(var1);
- if (this.m_currEntryDone) {
- this.m_currEntryDone = false;
- }
-
- LDAPAttribute[] var3 = var2.getAttributes();
- LDIFAddContent var4 = new LDIFAddContent(var3);
- return var4;
- }
-
- private LDIFDeleteContent parse_delete_spec(LineReader var1) throws IOException {
- String var2 = var1.readLine();
- if (var2 != null && !var2.equals("")) {
- throw new IOException("invalid SEP");
- } else {
- LDIFDeleteContent var3 = new LDIFDeleteContent();
- return var3;
- }
- }
-
- private LDIFModifyContent parse_mod_spec(LineReader var1) throws IOException {
- Object var2 = null;
- String var10 = var1.readLine();
- LDIFModifyContent var3 = new LDIFModifyContent();
-
- do {
- byte var4 = -1;
- if (var10.startsWith("add:")) {
- var4 = 0;
- } else if (var10.startsWith("delete:")) {
- var4 = 1;
- } else {
- if (!var10.startsWith("replace:")) {
- throw new IOException("unknown modify type");
- }
-
- var4 = 2;
- }
-
- LDIFAttributeContent var5 = (LDIFAttributeContent)this.parse_ldif_content(var1);
- if (var5 != null) {
- LDAPAttribute[] var12 = var5.getAttributes();
-
- for(int var13 = 0; var13 < var12.length; ++var13) {
- LDAPModification var14 = new LDAPModification(var4, var12[var13]);
- var3.addElement(var14);
- }
- } else {
- int var6 = var10.indexOf(":");
- if (var6 == -1) {
- throw new IOException("colon missing in " + var10);
- }
-
- String var7 = var10.substring(var6 + 1).trim();
- if (var4 == 0) {
- throw new IOException("add operation needs the value for attribute " + var7);
- }
-
- LDAPAttribute var8 = new LDAPAttribute(var7);
- LDAPModification var9 = new LDAPModification(var4, var8);
- var3.addElement(var9);
- }
-
- if (this.m_currEntryDone) {
- this.m_currEntryDone = false;
- break;
- }
-
- var10 = var1.readLine();
- } while(var10 != null && !var10.equals(""));
-
- return var3;
- }
-
- private LDIFModDNContent parse_moddn_spec(LineReader var1) throws IOException {
- Object var2 = null;
- String var5 = var1.readLine();
- LDIFModDNContent var3 = new LDIFModDNContent();
-
- do {
- if (var5.startsWith("newrdn:") && var5.length() > "newrdn:".length() + 1) {
- var3.setRDN(var5.substring("newrdn:".length()).trim());
- } else if (var5.startsWith("deleteoldrdn:") && var5.length() > "deleteoldrdn:".length() + 1) {
- String var4 = var5.substring("deleteoldrdn:".length()).trim();
- if (var4.equals("0")) {
- var3.setDeleteOldRDN(false);
- } else {
- if (!var4.equals("1")) {
- throw new IOException("Incorrect input for deleteOldRdn ");
- }
-
- var3.setDeleteOldRDN(true);
- }
- } else if (var5.startsWith("newsuperior:") && var5.length() > "newsuperior:".length() + 1) {
- var3.setNewParent(var5.substring("newsuperior:".length()).trim());
- }
-
- var5 = var1.readLine();
- } while(var5 != null && !var5.equals(""));
-
- return var3;
- }
-
- public static boolean isPrintable(byte[] var0) {
- for(int var1 = var0.length - 1; var1 >= 0; --var1) {
- if ((var0[var1] < 32 || var0[var1] > 127) && var0[var1] != 9) {
- return false;
- }
- }
-
- return true;
- }
-
- public static void breakString(PrintWriter var0, String var1, int var2) {
- int var3 = var1.length();
- int var4 = 0;
- int var5 = var2;
-
- while(var3 > 0) {
- int var6 = Math.min(var5, var3);
- String var7 = var1.substring(var4, var4 + var6);
- if (var4 != 0) {
- var0.print(" " + var7);
- } else {
- var0.print(var7);
- --var5;
- }
-
- var4 += var6;
- var3 -= var6;
- var0.print('\n');
- }
-
- }
-
- public int getVersion() {
- return this.m_version;
- }
-
- public String toString() {
- return "LDIF {" + this.m_source + "}";
- }
-
- // $FF: synthetic method
- static char access$0() {
- return '#';
- }
-
- // $FF: synthetic method
- static boolean access$1(LDIF var0) {
- return var0.m_done;
- }
-
- // $FF: synthetic method
- static void access$2(LDIF var0, boolean var1) {
- var0.m_done = var1;
- }
- }
-